前面幾篇有提到,可以使用函示建構式、或是 ES 6 來建立原型,今天就來介紹使用 函示建構式 來建立原型。
首先便是建立一個函示建構式
//函示建構式
function TShirt(color,material,size){
	this.color = color
	this.material = material
	this.size = size
}
雖然是函式但我們不會使用直些使用  Tshirt()  來呼叫這個函式,而是會搭配 new 來製作實體資料 ,使用 new  這個運算子製作出來的都一定會是物件。
當使用 new  製作新物件時,函式建構式中的 this  則會指向這個新物件本身,因此上方範例中的 color 、material 、 size  接下來都會變成物件中的屬性,並且在根據參數設定,讓物件中屬性有不同的值,這邊就夠過 new 搭配參數,來讓新增一個 BlackTShit 物件:
const BlackTShit = new TShirt('black','棉','L')
這樣便是使用 TShirt 這個函示建構式來製作 BlackTShit  物件,將 BlackTShit  的  [[Prototype]] 點開後會發現一般建立變數時都沒有的 constructor  屬性,如圖

這是因為 BlackTShit  是使用函示建構式製作,當這筆物件使用建構函示製作時,他的原型就會是 constructor ,並且也可以看到 constructor  指向的是 TShirt 這個函示。
這樣變完成一個簡單的原型鍊,不過想在原型中新增方法,是無法直接寫在函示建構式上,這邊會需要使用 prototype  來製作的原型方法,繼續以 TShirt  為例就會是:
TShirt.prototype.clothe = function() {
  console.log(`穿上 ${this.color} T Shit`);
}
BlackTShit.clothe() // 穿上 black T Shit
這時在使用 TShirt 製作一個新的實體資料,來確認 clothe()  這個原型方法其他實體是否能使用。
const darkBlueTShit= new TShirt('darkBlue','聚酯纖維','XL')
darkBlueTShit.clothe() // 穿上 darkBlue T Shit
另外這邊要補充一點:當我們使用對建構函示的名稱使用 .prototype 他會回傳 constructor ,而這個 constructor 其實指向自己這個建構函示,以本次範例來說就是使用  TShirt.prototype 回傳的 constructor  就是指向 TShirt 建構函式自己,這點雖然根本次文章無關,但是在後續製作多層原型時會有使用到此觀念,於是這邊先補充了。

最後要提的一點 [[prototype]]與 prototype 差別 :
[[prototype]] 物件上使用 ( chrome瀏覽器更新現在看到的是 [[prototype]] ,以前的是 __proto__ 兩者差異先前的文章有提到:prototype 函式上使用[[prototype]] 在 JS 中,幾乎所有資料都有 [[prototype]],是用來連接原型的,不過他並不是真正的一個屬性,因此又被稱做 『隱式原型』 implicit prototype link 。
[[prototype]]  正是因為所有資料都有這個屬性,因此直接使用 __proto__  去做修改會導致程式碼管理上困難。
而  prototype  則只有函示上會顯示,因此若要實際為原型添加方法,會選擇使用 prototype  去新增。